﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Net.Mail;
using System.Text;
using System.Drawing;
using System.ComponentModel;
using Quaack.Properties;

namespace Quaack
{
    public partial class bevestigen : System.Web.UI.Page
    {
                
        protected void Page_Load(object sender, EventArgs e)
        {
            /*Bevestigings email met in de email de volgende link voorbeeld http://www.quaack.nl/bevestigen.aspx?id=1
             * let op in de testomgeving moet men  "~/bevestigen.aspx?id=1" 
             * id staat voor het profileid die net is aangemaakt als er op de email op de link wordt geklikt
             * wordt er in de database gezocht naar de id met waarde 1 en of deze niet is verlopen*/
            
            
            /*Haal de Request op uit de webpagina*/
            string gebruiker = Convert.ToString(Request["id"]);
            int userID = Convert.ToInt16(gebruiker);
            string mailadres = Convert.ToString(Request["email"]);
            
            /*databaseconnectie*/
            SqlConnection sqlConn = new SqlConnection(Settings.Default.quaackdb);

            /*bevestigen aanmaken profiel. Hier is request email = "leeg"*/
            if (userID != 0 && mailadres == "leeg")
            {
                /*Check of gebruiker bestaat*/
                int resultaatcount = 0;
                SqlCommand checkUserExists = new SqlCommand("SELECT COUNT(*) from profile WHERE profileid = " + userID + "", sqlConn);
                sqlConn.Open();
                object sqlObject = checkUserExists.ExecuteScalar();
                sqlConn.Close();
                resultaatcount = Convert.ToInt16(sqlObject.ToString());
                if (resultaatcount > 0) /*Gebruiker bestaat*/
                {
                    /*Bereken of tijd email binnen gestelde tien minuten na aanmaken profiel verstuurd is*/
                    DateTime tijdmail = DateTime.Now;
                    DateTime tijdsysteem = new DateTime();
                    SqlCommand endverification = new SqlCommand("Select verficationpendingdatetime from profile where profileid = " + userID + "", sqlConn);
                    sqlConn.Open();
                    object sqlObject1 = endverification.ExecuteScalar();
                    sqlConn.Close();
                    tijdsysteem = Convert.ToDateTime(sqlObject1.ToString());
                    int result = DateTime.Compare(tijdmail, tijdsysteem);
                    if (result <= 0) /*Gebruiker is op tijd*/
                    {
                        /*Gebruiker wordt geaccepteerd*/
                        sqlConn.Open();
                        SqlCommand cmd = new SqlCommand();
                        cmd.Connection = sqlConn;
                        cmd.CommandText = "UPDATE profile SET verificationpending = 0, tempblocked = 0 where profileid = " + userID + "";
                        cmd.ExecuteReader();
                        sqlConn.Close();
                        LblMelding.Text = "Je profiel succesvol toegevoegd." + Environment.NewLine + " Welkom bij Quaack!";
                        Response.AddHeader("refresh", "3; URL=../Default.aspx");
                    }
                    else
                    {
                        /*gebruiker is te laat en wordt verwijderd*/
                        sqlConn.Open();
                        SqlCommand cmd = new SqlCommand();
                        cmd.Connection = sqlConn;
                        cmd.CommandText = "DELETE FROM profile WHERE profileid = " + "'" + userID + "'";
                        cmd.ExecuteReader();
                        sqlConn.Close();
                        LblMelding.Text = "Je hebt te laat je gegevens geverifieerd." + Environment.NewLine + "Je gegevens zijn verwijderd." + Environment.NewLine + "Maak opnieuw een profiel aan.";
                        Response.AddHeader("refresh", "3; URL=Default.aspx");
                    }
                }
                else
                {
                    LblMelding.Text = "U bent niet geregistreerd." + Environment.NewLine + "Maak eerst een profiel aan";
                    Response.AddHeader("refresh", "3; URL=Default.aspx");
                }
            }
            
            /*bevestigen wijzigen profiel. Hier moet request email gevuld zijn met het oude of nieuwe email-adres van de gebruiker.*/
            else if (userID != 0 && mailadres != "leeg")
            {
                /*Haal paramater uit request*/
                string wachtwoordNew = Convert.ToString(Request["password"]);
                string profielNew = Convert.ToString(Request["profile"]);
                string avatarNew = Convert.ToString(Request["avatar"]);
                string mobielNew = Convert.ToString(Request["mobile"]);

                if (mobielNew == "o")
                {
                    mobielNew = null;
                }

                /*kijk of gebruiker bestaat*/
                int resultaatcount = 0;
                SqlCommand checkUserExists = new SqlCommand("SELECT COUNT(*) from profile WHERE profileid = " + userID + "", sqlConn);
                sqlConn.Open();
                object sqlObject = checkUserExists.ExecuteScalar();
                sqlConn.Close();
                resultaatcount = Convert.ToInt16(sqlObject.ToString());
                if (resultaatcount > 0) /*Gebruiker bestaat*/
                {
                    if (avatarNew == "leeg") /*Gebruiker heeft geen nieuwe avatar gekozen*/
                    {
                        /*Bereken of tijd email binnen gestelde tien minuten na aanmaken profiel verstuurd is*/
                        DateTime tijdmail = DateTime.Now;
                        DateTime tijdsysteem = new DateTime();
                        SqlCommand endverification = new SqlCommand("Select verficationpendingdatetime from profile where profileid = " + userID + "", sqlConn);
                        sqlConn.Open();
                        object sqlObject1 = endverification.ExecuteScalar();
                        sqlConn.Close();
                        tijdsysteem = Convert.ToDateTime(sqlObject1.ToString());
                        int result = DateTime.Compare(tijdmail, tijdsysteem);
                        if (result <= 0) /*mail is op tijd, binnen tien minuten na wijziging*/
                        {
                            SqlCommand VoerWijzigProfielUit = new SqlCommand("Update profile SET password = @password, profile = @profile, email = @email, mobilenumber= @mobilenumber WHERE profileid = " + userID + "", sqlConn);
                            VoerWijzigProfielUit.Parameters.AddWithValue("@password", wachtwoordNew);
                            VoerWijzigProfielUit.Parameters.AddWithValue("@profile", profielNew);
                            VoerWijzigProfielUit.Parameters.AddWithValue("@email", mailadres);
                            VoerWijzigProfielUit.Parameters.AddWithValue("@mobilenumber", mobielNew);
                            sqlConn.Open();
                            VoerWijzigProfielUit.ExecuteNonQuery();
                            sqlConn.Close();
                            LblMelding.Text = "Je gegevens zijn succesvol gewijzigd.";
                            Response.AddHeader("refresh", "3; URL=Default.aspx");
                        }
                        else
                        {
                            /*Mail is te laat. Oude gegevens worden teruggeplaatst in database*/
                            LblMelding.Text = "Je gegevens zijn niet gewijzigd. Je hebt te laat geverifieerd.";
                            Response.AddHeader("refresh", "3; URL=Default.aspx");
                        }
                    }
                    else /*gebruiker heeft nieuwe avatar gekozen*/
                    {
                        /*Bereken of tijd email binnen gestelde tien minuten na aanmaken profiel verstuurd is*/
                        DateTime tijdmail = DateTime.Now;
                        DateTime tijdsysteem = new DateTime();
                        SqlCommand endverification = new SqlCommand("Select verficationpendingdatetime from profile where profileid = " + userID + "", sqlConn);
                        sqlConn.Open();
                        object sqlObject1 = endverification.ExecuteScalar();
                        sqlConn.Close();
                        tijdsysteem = Convert.ToDateTime(sqlObject1.ToString());
                        int result = DateTime.Compare(tijdmail, tijdsysteem);
                        if (result <= 0) /*mail is op tijd, binnen tien minuten na wijziging*/
                            {
                                SqlCommand VoerWijzigProfielUit = new SqlCommand("Update profile SET password = @password, profile = @profile, email = @email, mobilenumber= @mobilenumber, avatarlocation = @avatarlocation WHERE profileid = " + userID + "", sqlConn);
                                VoerWijzigProfielUit.Parameters.AddWithValue("@password", wachtwoordNew);
                                VoerWijzigProfielUit.Parameters.AddWithValue("@profile", profielNew);
                                VoerWijzigProfielUit.Parameters.AddWithValue("@email", mailadres);
                                VoerWijzigProfielUit.Parameters.AddWithValue("@mobilenumber", mobielNew);
                                VoerWijzigProfielUit.Parameters.AddWithValue("@avatarlocation", avatarNew);
                                sqlConn.Open();
                                VoerWijzigProfielUit.ExecuteNonQuery();
                                sqlConn.Close();
                            }
                        else
                        {
                            /*Mail is te laat. Oude gegevens blijven staan in database*/
                            LblMelding.Text = "Je gegevens zijn niet gewijzigd." + Environment.NewLine + "U heeft te laat gereageerd." + Environment.NewLine + "Voer wijzigingen opnieuw uit. ";
                            Response.AddHeader("refresh", "3; URL=Default.aspx");
                        }
                    }
                }
                else
                {
                    LblMelding.Text = "Je hebt nog geen profiel." + Environment.NewLine + "Maak eerst een profiel aan.";
                    Response.AddHeader("refresh", "3; URL=Default.aspx");
                }
            }

            else
            {
                LblMelding.Text = "Request is niet geldig.";
                Response.AddHeader("refresh", "3; URL=Default.aspx");
            }
        }
    }
}